﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace QuanLiBongDa.DataAccessLayer
{
    class SQLService
    {
        //execute string sql but not return values
        public static bool mExecuteNonquery(string str)
        {
            SqlConnection conn = ConnectDatabase.StartConnect();
            SqlCommand cmd = new SqlCommand(str, conn);
            try
            {
                conn.Open();
                if (cmd.ExecuteNonQuery() > 0)
                {
                    return true;
                }
                else
                    return false;
            }
            catch
            {
                return false;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
        public static bool mmExecuteNonquery(string str, params SqlParameter[] par)
        {
            SqlConnection conn = ConnectDatabase.StartConnect();
            SqlCommand cmd = new SqlCommand(str, conn);
            try
            {
                conn.Open();
                cmd.CommandType = CommandType.StoredProcedure;
                if (cmd != null)
                    cmd.Parameters.AddRange(par);
                if (cmd.ExecuteNonQuery() > 0)
                {
                    return true;
                } 
                else
                 return false;                
            }
            catch
            {
                return false;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
        //kết quả trả về là 1 bảng với 1 câu truy vấn SQL thông thường
        //vd : FillTable(sql); sql này là select * from Table
        public static DataTable FillTable(string sql)
        {
            SqlConnection con = ConnectDatabase.StartConnect();
            SqlDataAdapter da = new SqlDataAdapter(sql, con);
            try
            {
                DataTable dt =new DataTable();
                da.Fill(dt);
                return dt;
            }
            catch
            {
                return null;
            }
        }
        //kết quả trả về là 1 bảng với 1 câu truy vấn SQL thuộc kiểu Store Procedure
        //SqlParameter dùng để truyền giá trị vào đối số trong câu truy vấn
        //Dùng trong truy vấn, vd FillTable("TimMD_Ten", par), trong đó par chứa giá trị (TenDoi,TenSan,TenCauThu,TenVong)
        public static DataTable FillTable(string strstore,params SqlParameter [] par)
        {
            SqlConnection con = ConnectDatabase.StartConnect();
            SqlDataAdapter sda = new SqlDataAdapter(strstore, con);
            sda.SelectCommand.CommandType = CommandType.StoredProcedure;
            try
            {
                con.Open();

                if (par != null)
                    sda.SelectCommand.Parameters.AddRange(par);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
            catch 
            {
                return null;
            }
        }
        //bien sql là một store procedure(vi du LoadDoiBong,vv) trả về table( dư liệu được tổng hợp từ các table khác nhau) mà ko cần truyền tham số 
        //(dùng để hiển thị thống kê)
        public static DataTable Table_Reader(string sql)
        {
            SqlConnection conn = ConnectDatabase.StartConnect();
            SqlCommand cmd = new SqlCommand(sql, conn);
            try
            {
                conn.Open();
                cmd.CommandType = CommandType.StoredProcedure;
                DataTable dt = new DataTable();
                dt.Load(cmd.ExecuteReader());
                return dt;
            }
            catch (System.Exception ex)
            {
                return null;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
        //return all values of table "str"
        public static string ReturnAll(string str)
        {
            string s = "select * from " + str;
            return s;
        }
        //return 1 object data reader with sql string
        public static SqlDataReader mExecuteReader(string str)
        {
            SqlConnection conn = ConnectDatabase.StartConnect();
            SqlCommand cmd = new SqlCommand(str, conn);
            SqlDataReader dr;
            try
            {
                conn.Open();
                dr = cmd.ExecuteReader();
                return dr;
            }
            catch
            {
                return null;
            }
        }
        //return 1 object data reader with sql string and parameter
        public static SqlDataReader mmExecuteReader(string storestr,params SqlParameter [] par)
        {
            SqlConnection conn = ConnectDatabase.StartConnect();
            SqlCommand cmd = new SqlCommand(storestr, conn);
            cmd.CommandType = CommandType.StoredProcedure;
            if(cmd.Connection.State==ConnectionState.Closed)
            {
                cmd.Connection.Open();
            }
            if(par != null)
            {
                for (int i = 0; i < par.Length; i++ )
                {
                    cmd.Parameters.Add(par[i]);
                }
            }
            try
            {
                return cmd.ExecuteReader();
            }
            catch
            {
                return null;
            }
        }
        // return datatable with command ExecuteReader;
        
    }
}
